#include "key_led.h"

#ifdef user_FreeRTOS

#include "FreeRTOS.h"
#include "semphr.h"
#include "queue.h"
#include "cmsis_os.h"

//void AppTask_Key_Scan(void *argument)
//{
//	/* USER CODE BEGIN AppTask_Key_Scan */
//	GPIO_PinState key_status = GPIO_PIN_SET;
//	keys key = key_none;
//	extern osMessageQueueId_t Queue_KeyNumbersHandle;
//	/* Infinite loop */
//	for (;;)
//	{
//		key = key_none;
//		key_status = HAL_GPIO_ReadPin(KEY_Right_GPIO_Port, KEY_Right_Pin);
//		if (key_status == GPIO_PIN_RESET)
//			key = key_right;
//		key_status = HAL_GPIO_ReadPin(KEY_Left_GPIO_Port, KEY_Left_Pin);
//		if (key_status == GPIO_PIN_RESET)
//			key = key_left;
//		key_status = HAL_GPIO_ReadPin(KEY_Down_GPIO_Port, KEY_Down_Pin);
//		if (key_status == GPIO_PIN_RESET)
//			key = key_down;
//		key_status = HAL_GPIO_ReadPin(KEY_Up_GPIO_Port, KEY_Up_Pin);
//		if (key_status == GPIO_PIN_SET)
//			key = key_up;

//		if (key != key_none)
//		{
//			xQueueOverwrite(Queue_KeyNumbersHandle, &key);
//			osDelay(pdMS_TO_TICKS(300));
//		}
//		else
//		{
//			osDelay(pdMS_TO_TICKS(10));
//		}
//	}
//	/* USER CODE END AppTask_Key_Scan */
//}
#endif

keys key_scan(uint8_t mode)
{
    static uint8_t key_standup = 1;
    keys keyval = key_none;

    if (mode) key_standup = 1;

    if (key_standup && (KEY_RIGHT == 0 || KEY_DOWN == 0 || KEY_LEFT == 0 || KEY_UP == 1))
    {
        HAL_Delay(10);
        key_standup = 0;

        if (KEY_RIGHT == 0)  keyval = key_right;

        if (KEY_DOWN == 0)  keyval = key_down;

        if (KEY_LEFT == 0)  keyval = key_left;

        if (KEY_UP == 1) keyval = key_up;
    }
    else if (KEY_RIGHT == 1 && KEY_DOWN == 1 && KEY_LEFT == 1 && KEY_UP == 0)
    {
        key_standup = 1;
    }

    return keyval;
}


